/**
 * Created by sony99987 on 2016-05-19.
 */
/* Laura Doktorova https://github.com/olado/doT */
(function() {
    function o() {
        var a = {
            "&" : "&#38;",
            "<" : "&#60;",
            ">" : "&#62;",
            '"' : "&#34;",
            "'" : "&#39;",
            "/" : "&#47;"
        }, b = /&(?!#?\w+;)|<|>|"|'|\//g;
        return function() {
            return this ? this.replace(b, function(c) {
                return a[c] || c
            }) : this
        }
    }

    function p(a, b, c) {
        return ( typeof b === "string" ? b : b.toString()).replace(a.define || i, function(l, e, f, g) {
            if (e.indexOf("def.") === 0)
                e = e.substring(4);
            if (!( e in c))
                if (f === ":") {
                    a.defineParams && g.replace(a.defineParams, function(n, h, d) {
                        c[e] = {
                            arg : h,
                            text : d
                        }
                    });
                    e in c || (c[e] = g)
                } else
                    (new Function("def", "def['" + e + "']=" + g))(c);
            return ""
        }).replace(a.use || i, function(l, e) {
            if (a.useParams)
                e = e.replace(a.useParams, function(g, n, h, d) {
                    if (c[h] && c[h].arg && d) {
                        g = (h + ":" + d).replace(/'|\\/g, "_");
                        c.__exp = c.__exp || {};
                        c.__exp[g] = c[h].text.replace(RegExp("(^|[^\\w$])" + c[h].arg + "([^\\w$])", "g"), "$1" + d + "$2");
                        return n + "def.__exp['" + g + "']"
                    }
                });
            var f = (new Function("def", "return " + e))(c);
            return f ? p(a, f, c) : f
        })
    }

    function m(a) {
        return a.replace(/\\('|\\)/g, "$1").replace(/[\r\t\n]/g, " ")
    }

    var j = {
        version : "1.0.1",
        templateSettings : {
            evaluate : /\{\{([\s\S]+?(\}?)+)\}\}/g,
            interpolate : /\{\{=([\s\S]+?)\}\}/g,
            encode : /\{\{!([\s\S]+?)\}\}/g,
            use : /\{\{#([\s\S]+?)\}\}/g,
            useParams : /(^|[^\w$])def(?:\.|\[[\'\"])([\w$\.]+)(?:[\'\"]\])?\s*\:\s*([\w$\.]+|\"[^\"]+\"|\'[^\']+\'|\{[^\}]+\})/g,
            define : /\{\{##\s*([\w\.$]+)\s*(\:|=)([\s\S]+?)#\}\}/g,
            defineParams : /^\s*([\w$]+):([\s\S]+)/,
            conditional : /\{\{\?(\?)?\s*([\s\S]*?)\s*\}\}/g,
            iterate : /\{\{~\s*(?:\}\}|([\s\S]+?)\s*\:\s*([\w$]+)\s*(?:\:\s*([\w$]+))?\s*\}\})/g,
            varname : "it",
            strip : true,
            append : true,
            selfcontained : false
        },
        template : undefined,
        compile : undefined
    }, q;
    if ( typeof module !== "undefined" && module.exports)
        module.exports = j;
    else if ( typeof define === "function" && define.amd)
        define(function() {
            return j
        });
    else {
        q = function() {
            return this || (0, eval)("this")
        }();
        q.doT = j
    }
    String.prototype.encodeHTML = o();
    var r = {
        append : {
            start : "'+(",
            end : ")+'",
            endencode : "||'').toString().encodeHTML()+'"
        },
        split : {
            start : "';out+=(",
            end : ");out+='",
            endencode : "||'').toString().encodeHTML();out+='"
        }
    }, i = /$^/;
    j.template = function(a, b, c) {
        b = b || j.templateSettings;
        var l = b.append ? r.append : r.split, e, f = 0, g;
        a = b.use || b.define ? p(b, a, c || {}) : a;
        a = ("var out='" + (b.strip ? a.replace(/(^|\r|\n)\t* +| +\t*(\r|\n|$)/g, " ").replace(/\r|\n|\t|\/\*[\s\S]*?\*\//g, "") : a).replace(/'|\\/g, "\\$&").replace(b.interpolate || i, function(h, d) {
            return l.start + m(d) + l.end
        }).replace(b.encode || i, function(h, d) {
            e = true;
            return l.start + m(d) + l.endencode
        }).replace(b.conditional || i, function(h, d, k) {
            return d ? k ? "';}else if(" + m(k) + "){out+='" : "';}else{out+='" : k ? "';if(" + m(k) + "){out+='" : "';}out+='"
        }).replace(b.iterate || i, function(h, d, k, s) {
            if (!d)
                return "';} } out+='";
            f += 1;
            g = s || "i" + f;
            d = m(d);
            return "';var arr" + f + "=" + d + ";if(arr" + f + "){var " + k + "," + g + "=-1,l" + f + "=arr" + f + ".length-1;while(" + g + "<l" + f + "){" + k + "=arr" + f + "[" + g + "+=1];out+='"
        }).replace(b.evaluate || i, function(h, d) {
            return "';" + m(d) + "out+='"
        }) + "';return out;").replace(/\n/g, "\\n").replace(/\t/g, "\\t").replace(/\r/g, "\\r").replace(/(\s|;|\}|^|\{)out\+='';/g, "$1").replace(/\+''/g, "").replace(/(\s|;|\}|^|\{)out\+=''\+/g, "$1out+=");
        if (e && b.selfcontained)
            a = "String.prototype.encodeHTML=(" + o.toString() + "());" + a;
        try {
            return new Function(b.varname, a)
        } catch(n) {
            typeof console !== "undefined" && console.log("Could not create a template function: " + a);
            throw n;
        }
    };
    j.compile = function(a, b) {
        return j.template(a, null, b)
    }
})();

